package org.wj.config.temperature;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Partitioner;

/**
 * 定制分区器, 分区器会根据映射器的输出键来决定哪个映射器的输出发送到哪个归约器
 * 首先定制两个插件类： 1、 定制分区器控制哪个归约器处理哪些键  2、 定制比较器(Comparator)对归约器值排序
 *
 *定制分区器保证有相同的键（自然键）的所有数据都发送到同一个归约器。 通过定制比较器完成排序，保证一旦数据到达归约器，就会按自然键对数据分组
 *
 */
public class DateTemperaturePartitioner extends MapReduceBase implements Partitioner<DateTemperaturePair, Text> {
    @Override
    public int getPartition(DateTemperaturePair pair, Text text, int numberOfPartitions) {
        return Math.abs(pair.getYearMonth().hashCode() % numberOfPartitions);
    }
}
